package com.coupon.admin.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 优惠券实体类
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("coupon")
public class Coupon {
    
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    
    /**
     * 券名称
     */
    private String name;
    
    /**
     * 券类型：FULL_REDUCTION(满减), DISCOUNT(折扣), DIRECT_REDUCTION(立减), 
     * GIFT(赠品), LADDER(阶梯券)
     */
    private String type;
    
    /**
     * 面值/折扣值
     */
    private BigDecimal value;
    
    /**
     * 使用门槛（满多少可用）
     */
    private BigDecimal threshold;
    
    /**
     * 总库存
     */
    private Integer totalStock;
    
    /**
     * 已发放数量
     */
    private Integer issuedCount;
    
    /**
     * 已领取数量
     */
    private Integer receivedCount;
    
    /**
     * 已使用数量
     */
    private Integer usedCount;
    
    /**
     * 每人限领数量
     */
    private Integer perUserLimit;
    
    /**
     * 有效期开始时间
     */
    private LocalDateTime validStartTime;
    
    /**
     * 有效期结束时间
     */
    private LocalDateTime validEndTime;
    
    /**
     * 状态：DRAFT(草稿), PUBLISHED(已发布), STOPPED(已停用), EXPIRED(已过期)
     */
    private String status;
    
    /**
     * 适用范围：ALL(全店), CATEGORY(指定品类), PRODUCT(指定商品)
     */
    private String scope;
    
    /**
     * 适用范围ID列表（JSON格式）
     */
    private String scopeIds;
    
    /**
     * 商家ID
     */
    private Long merchantId;
    
    /**
     * 创建人ID
     */
    private Long creatorId;
    
    /**
     * 券描述
     */
    private String description;
    
    /**
     * 使用说明
     */
    private String usageInstructions;
    
    /**
     * 是否支持拼券团
     */
    private Boolean supportGroup;
    
    /**
     * 拼券团人数要求
     */
    private Integer groupSize;
    
    /**
     * 拼券团奖励倍数
     */
    private BigDecimal groupRewardMultiplier;
    
    /**
     * 是否支持盲盒任务
     */
    private Boolean supportBlindBox;
    
    /**
     * 盲盒任务ID
     */
    private Long blindBoxTaskId;
    
    /**
     * 阶梯券配置（JSON格式）
     */
    private String ladderConfig;
    
    /**
     * AI推荐权重
     */
    private BigDecimal aiWeight;
    
    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    
    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    
    /**
     * 逻辑删除标记
     */
    @TableLogic
    private Integer deleted;
}
